//1.1接口定义
    interface Iuser
    {
        name:string,
        age:number
    }
//1.2接口使用-增加变量和减少变量是不允许的，改变属性的数据类型是不允许的；可见，赋值的时候，**变量的形状必须和接口的形状保持一致
 let tom:Iuser={
     name:'接口',
     age:15, //如果只给一个，会报错缺少属性。类型必须得跟定义的类型一致
    //sex:0, //类型与定义的保持一致，不能多，也不能少属性
    }

//1.3 接口可选属性-有时接口里的属性可有可无，可定义为可选属性。类型的冒号前加上英文的问号(?)
interface Iuser2
{
    name:string,
    age:number,
    sex?:string, //定义可选属性
 //   [prop:string]:string|number  //  [propName: string] 定义任意属性。一旦定义了任意属性，那么确定属性和可选属性的类型都必须是它的类型的子集。意思是其它类型都必须跟该类型保持一致，否则会报错,如果有多个不同类型可用联合类型填加
}
let tom2:Iuser2={
    name:'接口',
    age:15,
}

//1.4 只读属性-有时候我们希望对象中的一些字段只能在创建的时候被赋值，后续不能在被更改。可用只读属性
interface Iuser3
{
    readonly id:number,
    name:string,
    age:number
}
let tom3:Iuser3={
    id:11,
    name:'接口',
    age:15,
}
// tom3.id=22 // 报错： 无法分配到 "id" ，因为它是只读属性
tom.name='测试'
console.log(tom3);

//1.5 可索引接口-对数组、对象的访问约束（不常用）
// 数组定义
interface Iarr {
    [prop:number]: string
}
// 使用接口约束数组
let arr:Iarr = ['1','2']
console.log(arr[1]);

//对象定义
interface Iobj {
    [prop:string]: string
}

let json:Iobj = {
    a: '1'
}
console.log(json['a']);





//2.接口应用-可用于约束,ajax传参请求
   //2.1 先复习下ajax-注意有报错XMLHttpRequest
   /*  let ajax = new XMLHttpRequest()
    // 建立连接 open('请求方式','请求连接'，同步或者异步)
    ajax.open('get','https://api-hmugo-web.itheima.net/api/public/v1/home/swiperdata',true)
    // 发送请求
    ajax.send()
    // ajax状态判断
    ajax.onreadystatechange = function(){
        if(ajax.status==200 && ajax.readyState==4){
            console.log('接口数据',ajax.response);
            
        }
    } */
    //2.2 封装下
 /*    function request(params){
        let ajax = new XMLHttpRequest()
        ajax.open(params.method,params.url)
        ajax.send(params.data)
        ajax.onreadystatechange = function(){
            if(ajax.status==200 && ajax.readyState==4){
                console.log(ajax.response);  
            }
        }
    }
    request({method: 'get',url: 'https://api-hmugo-web.itheima.net/api/public/v1/home/swiperdata'}) */

    //2.3 使用ts定义接口约束-可对传入的参数进行强制限制
  /*   interface Iparams{
        method:string,
        url:string,
        data?:any
    }
    function request(params:Iparams){
        let ajax = new XMLHttpRequest() //注意此处会报错，XMLHttpRequest is not defined
        ajax.open(params.method,params.url)
        ajax.send(params.data)
        ajax.onreadystatechange = function(){
            if(ajax.status==200 && ajax.readyState==4){
                console.log(ajax.response);  
            }
        }
    }
    // request() //如果不传参数的话，编译时会报错
    request({method: 'get',url: 'https://api-hmugo-web.itheima.net/api/public/v1/home/swiperdata'})  */

export {}  




